package com.hjj.app;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class MyApp2 {
    public static void main(String[] args) {
        try {
            Class<?> aClass = Class.forName("com.hjj.beans.Stu");
            // 获取构造方法对象
            Constructor<?> constructor = aClass.getConstructor();
            // 获取对象
            Object o = constructor.newInstance();

            // 调用fun1方法
            Method fun1 = aClass.getDeclaredMethod("fun1");
            // 放开权限【忽略访问修饰符】
            fun1.setAccessible(true);
            // 调用方法
            // 如果调用的方法没有返回值者invoke()方法返回null，如果调用方法有返回值则invoke()方法返回调用方法返回的值
            fun1.invoke(o);

            Method fun2 = aClass.getDeclaredMethod("fun2", int.class, int.class);
            fun2.setAccessible(true);
            System.out.println(fun2.invoke(o, 20, 30));


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}
